# 23. 性能优化方法

前端性能优化通常按 网络层 → 资源加载 → 渲染 → 缓存 → 框架层 五个阶段依次推进,下面按阶段整理了常用方法及说明,方便速查。

# 性能优化实战方法(按阶段分类)

# 阶段一:网络层优化(减少请求 + 加速传输)

方法 说明
CDN 加速 静态资源分发到离用户最近的节点
HTTP/2 / HTTP/3 多路复用、头部压缩,减少连接开销
Gzip / Brotli 压缩 减少传输体积(Brotli 比 Gzip 压缩率更高)
减少 HTTP 请求 合并小文件(但不建议过度合并,HTTP/2 下可适度拆分)
预加载(Preload) <link rel="preload" href="font.woff2" as="font"> 提前下载关键资源
预连接(Preconnect) <link rel="preconnect" href="https://api.example.com"> 提前建立连接
DNS 预解析 <link rel="dns-prefetch" href="//cdn.example.com">

# 阶段二:资源加载优化(更智能的加载策略)

方法 说明
代码分割(Code Splitting) 按路由/组件拆分 JS,只加载当前需要的代码(Webpack import() / Vite 自动)
懒加载(Lazy Load) 图片、组件、路由等,滚动到可视区再加载
Tree Shaking 移除未使用的代码(ES Module 静态分析)
异步加载 JS <script async>(下载完即执行)和 <script defer>(DOM 解析完再执行)
关键 CSS 内联 首屏所需 CSS 直接内联在 HTML 中,避免额外的请求阻塞渲染
非关键 CSS 延迟加载 media="print" 或 JS 动态注入

# 阶段三:渲染优化(让页面更流畅)

方法 说明
减少 Reflow / Repaint 避免频繁读写 DOM 布局属性(offsetTopscrollTop 等);用 requestAnimationFrame 批量更新
使用 transform 和 opacity 做动画 这两个属性由 GPU 加速,不触发 Reflow
虚拟滚动(Virtual Scroll) 长列表只渲染可视区域(如 vue-virtual-scrollerreact-window
使用 will-change 提前告知浏览器哪些属性会变化,但不要滥用(会占用 GPU 内存)
减少 DOM 节点数量 更少的节点 = 更快的 diff 和渲染
使用 content-visibility: auto 离屏元素跳过渲染,优化长页面首次加载性能

# 阶段四:缓存优化(减少重复加载)

方法 说明
HTTP 强缓存 + 协商缓存 Cache-Control + ETag 策略(详见上一轮回答)
Service Worker 离线缓存,拦截请求,实现 PWA 和秒开
本地存储缓存 localStorage 缓存接口数据,减少重复请求
CDN 缓存策略 合理设置 CDN 刷新规则

# 阶段五:框架层面优化(Vue / React 专属)

框架 优化方法
Vue v-once 渲染静态内容;v-memo 缓存模板片段;keep-alive 缓存组件;shallowRef / shallowReactive 减少深度响应式开销
React React.memo 避免不必要的重渲染;useMemo / useCallback 缓存值和函数;Suspense + 异步组件实现按需加载
通用 路由懒加载;组件库按需引入(unplugin-vue-components / babel-plugin-import);避免大型第三方库(如用 dayjs 代替 moment